<?php
function RegistroHeader($boleto){
    $linha  = numero("0",1); //Identificação do Registro Header: “0” (zero) 
    $linha .= numero("1",1); //Tipo de Operação: “1” (um) 
    $linha .= alfa("REMESSA",7); // Identificação por Extenso do Tipo de Operação 
    $linha .= numero("01",2); // Identificação do Tipo de Serviço: “01” 
    $linha .= alfa("COBRANCA",8); // Identificação por Extenso do Tipo de Serviço: “COBRANCA”
    $linha .= alfa("",7); // Complemento do Registro: “Brancos”
    $linha .= numero($boleto->get_agencia(),4); // Prefixo da Agência: Número da Agência onde está cadastrado o convênio líder do cedente 
    $linha .= alfa($boleto->get_agencia_dv(),1); // Dígito Verificador - D.V. - do Prefixo da Agência. 
    $linha .= numero($boleto->get_conta(),8); // Número da Conta Corrente: Número da conta onde está cadastrado o Convênio Líder do Cedente 
    $linha .= alfa($boleto->get_conta_dv(),1); // Dígito Verificador - D.V. – do Número da Conta Corrente do Cedente 
    $linha .= numero("",6); // Complemento do Registro: “000000”
    $linha .= alfa(nomeInstituicao($boleto->get_id_instituicao()),30); // Nome do Cedente 
    $linha .= alfa("001BANCODOBRASIL",18); // 001BANCODOBRASIL 
    $linha .= data(date("Y-m-d")); // Data da Gravação: Informe no formato “DDMMAA”
    $linha .= numero(GetMaxId(),7); // Sequencial da Remessa 
    $linha .= alfa("",22); // Complemento do Registro: “Brancos”
    $linha .= numero($boleto->get_convenio(),7); // Número do Convênio Líder (numeração acima de 1.000.000  um milhão)" 
    $linha .= alfa("",258); // Complemento do Registro: “Brancos”
    $linha .= numero($_SESSION["sequencial"],6); // Sequencial do Registro: ”000001"
    $_SESSION["sequencial"]++;
    
    return $linha;
}

function RegistroDetalhe($boleto, $transacao){
    $cedente = new instituicao();
    $cedente->carregar($boleto->get_id_instituicao());
    
    $sacado = new inscrito();
    $sacado->carregar($transacao["cpf"]);
    
    $detalhe  = numero("7", 1); // Identificação do Registro Detalhe: 7 (sete)
    $detalhe .= numero("02", 2); // Tipo de Inscrição do Cedente
    $detalhe .= numero(limpaCPF($cedente->get_cnpj()), 14); // Número do CPF/CNPJ do Cedente 
    $detalhe .= numero($boleto->get_agencia(), 4); // Prefixo da Agência 
    $detalhe .= alfa($boleto->get_agencia_dv(), 1); // Dígito Verificador - D.V. - do Prefixo da Agência 
    $detalhe .= numero($boleto->get_conta(), 8); // Número da Conta Corrente do Cedente 
    $detalhe .= alfa($boleto->get_conta_dv(), 1); // Dígito Verificador - D.V. - do Número da Conta Corrente do Cedente 
    $detalhe .= numero($boleto->get_convenio(), 7); // Número do Convênio de Cobrança do Cedente 
    $detalhe .= alfa("", 25); // Código de Controle da Empresa
    $detalhe .= numero($boleto->get_convenio(), 7); // Convenio 
    $detalhe .= numero($transacao["id"], 10); // Nosso-Número 
    $detalhe .= numero("00", 2); // Número da Prestação: “00” (Zeros)
    $detalhe .= numero("00", 2); // Grupo de Valor: “00” (Zeros)
    $detalhe .= alfa("", 3); // Complemento do Registro: “Brancos”
    $detalhe .= alfa("", 1); // Indicativo de Mensagem ou Sacador/Avalista 
    $detalhe .= alfa("", 3); // Prefixo do Título: “Brancos” 
    $detalhe .= numero("019", 3); // Variação da Carteira 
    $detalhe .= numero("", 1); // Conta Caução: “0” (Zero)
    $detalhe .= numero("000000", 6); // Número do Borderô: “000000” (Zeros) 
    $detalhe .= alfa("", 5); // Tipo de Cobrança 
    $detalhe .= numero("17", 2); // Carteira de Cobrança 
    $detalhe .= numero("01", 2); // Comando 
    $detalhe .= numero($transacao["id"], 10); // Seu Número/Número do Título Atribuído pelo Cedente 
    $detalhe .= data($transacao["data_vencimento"]); // Data de Vencimento 
    $detalhe .= num_real($transacao["valor_documento"], 13); // Valor do Título 
    $detalhe .= numero("001", 3); // Número do Banco: “001”
    $detalhe .= numero("0000", 4); // Prefixo da Agência Cobradora: “0000”
    $detalhe .= alfa("", 1); // Dígito Verificador do Prefixo da Agência Cobradora: “Brancos”
    $detalhe .= numero("01", 2); // Espécie de Titulo 
    $detalhe .= alfa("N", 1); // Aceite do Título
    $detalhe .= data($transacao["data_emissao"]); // Data de Emissão: Informe no formato “DDMMAA” 
    $detalhe .= numero("", 2); // Instrução Codificada 
    $detalhe .= numero("", 2); // Instrução Codificada 
    $detalhe .= num_real("", 13); // Juros de Mora por Dia de Atraso 
    $detalhe .= data(000000); // Data  Limite  para  Concessão  de  Desconto/Data  de  Operação  do BBVendor/Juros de Mora. 
    $detalhe .= num_real("", 13); // Valor do Desconto 
    $detalhe .= num_real("", 13); // Valor do IOF/Qtde Unidade Variável. 
    $detalhe .= num_real("", 13); // Valor do Abatimento 
    $detalhe .= numero("01", 2); // Tipo de Inscrição do Sacado 
    $detalhe .= numero(limpaCPF($sacado->get_cpf()), 14); // Número do CNPJ ou CPF do Sacado 
    $detalhe .= alfa($sacado->get_nome().$sacado->get_sobrenome(), 37); // Nome do Sacado 
    $detalhe .= alfa("", 3); // Complemento do Registro: “Brancos”
    $detalhe .= alfa($sacado->get_endereco()." ".$sacado->get_numero(), 40); // Endereço do Sacado 
    $detalhe .= alfa($sacado->get_bairro(), 12); // Bairro do Sacado 
    $detalhe .= numero(limpaCPF($sacado->get_cep()), 8); // CEP do Endereço do Sacado 
    $detalhe .= alfa($sacado->get_cidade(), 15); // Cidade do Sacado 
    $detalhe .= alfa($sacado->get_uf(), 2); // UF da Cidade do Sacado 
    $detalhe .= alfa($boleto->get_instrucoes1(), 40); // Observações/Mensagem ou Sacador/Avalista 
    $detalhe .= numero("", 2); // Número de Dias Para Protesto 
    $detalhe .= alfa("", 1); // Complemento do Registro: “Brancos”
    $detalhe .= numero($_SESSION["sequencial"], 6); // Seqüencial de Registro 
    $_SESSION["sequencial"]++;
    
    unset($cedente);
    unset($sacado);
    
    return $detalhe;
}

function RegistroTrailler(){
    $trailler  = numero("9", 1); // Identificação do Registro Trailer: “9”
    $trailler .= alfa("", 393); // Complemento do Registro: “Brancos”
    $trailler .= numero($_SESSION["sequencial"], 6); // 9(006) Número Seqüencial do Registro no Arquivo 
    $_SESSION["sequencial"]++;
    
    return $trailler;
}
